English version Spanish version German version

Sessione 4: Un Modello di Pianificazione della Produzione con Periodi di Tempo Multipli

Ora si estenderà il modello della sessione precedente includendo periodi di tempo multipli. Un nuovo Indice del Periodo è inserito nel modello per soddisfare questi periodi di tempo e quindi aggiornare i vari vettori che sono stati coinvolti dal nuovo dominio.


Nuovi concetti in questa sessione

Indici del periodo

Per aggiornare il vostro modello cosi' che includa un periodo multiplo, avrete bisogno di creare un indice che rappresenti il tempo di quel periodo. Questo tipo di indice è chiamato period index. Dopo che avrete definito l'indice del vostro periodo, potrete usarlo per aggiornare i dati, vettori di variabile e di vincolo per includere uno specifico periodo di tempo. Esempi d' indici di periodo potrebbero includere: months, quarters, e years.

Variabili di vendite e inventari

Quando state aggiornando un modello da un singolo periodo a periodi multipli, le vendite per uno specifico periodo potrebbero differire dalla quantità prodotta nello stesso periodo. Come risultato,è necessaria una nuova variabile che rappresenti quanto si necessiti vendere, e una nuova variabile che rappresenti il livello d' inventario per ogni periodo.

In molti casi, c'e' un costo fisso per il periodo implicato con l'inventario immaggazinato. In altri casi, tuttavia, il costo potrebbe non combaciare con l'attuale immaggazinamento dell'inventario, ma piuttosto con l'immaggazinamento e la rimozione dei prodotti dall'inventario del magazzino, attraverso i costi di lavoro implicati.Questo significa che si necessiterebbe di piu' variabili al modello, una per immagazzinare i prodotti e un'altra per rimuoverli dall'inventario.

Vincoli d' equilibrio dell'inventario

Dato che non è possibile vendere più prodotti di quanti se ne possieda, la variabile dell'inventario è usata per connettere le variabili di produzione alle variabili di vendita. Questo è fatto attraverso un tipo di vincolo, tipicamente chiamato balance constraint. Vincoli d'equilibrio sono usati per assicurarsi che le quantità in entrata siano di entità uguale alle quantità in uscita.

Un tipico vincolo d' equilibrio, stipula che la produzione totale, più il livello dell'inventario dal periodo precedente , equalizzi la quantità venduta, più quanto si lascia nell'inventario. Un esempio di vincolo d' equilibrio è:

     Produce + Inventory[month-1] = Sales + Inventory
    

In questo caso, l'entità che viene equilibrata è l'inventario.Invt[month-1] è un'annotazione usata in MPL per rappresentare il periodo precedente. Quando si lavora con un inventario dove il costo necessita di essere applicato all'immagazzinamento e alla rimozione dell'inventario, si avrà bisogno di definire due vincoli di equilibrio.Per esempio:

     Produce + OutInvt = Sales + PutInvt

     PutInvt + Inventory[month-1] = OutInvt + Inventory
    

Se si pensa alla pianta come un'entità, nel primo vincolo stiamo equilibrando ciò che va con la pianta con ciò che va fuori. Nella stessa maniera, il secondo vincolo equilibra ciò che va dentro, e ciò che va fuori dall'inventario.

Inventario iniziale e finale

In molti casi il modello di sviluppo necessita di specificare uno specifico inventario iniziale o finale per il periodo progettato. MPL per difetto esclude le entrate dell' Inventory[month-1] per il mese uguale a zero. Ci sono varie via con cui si può specificare un inventario iniziale, per esempio si può introdurre il vincolo in due parti come segue:

     INDEX
        month := (Jan, Feb, Mar, Apr)

     DATA
        StartInvt := 450

     SUBJECT TO
        InitInvt[month=Jan]:
           produce + StartInvt = sales + Inventory

        InvtBal [month>Jan]:
           produce + Inventory[month-1] = sales + Inventory
     

Questo creerà un vincolo di bilancio per il mese di Gennaio con l'inventario iniziale di 450 unità.Ci sono altre vie per includere un inventario di partenza in MPL che non richiedono che si duplichi il vincolo, per esempio con i sottoindici, ma questa è la via più semplice per formulare questi tipi di vincoli.


Descrizione del problema: un modello di pianificazione di produzione di multi-periodo

In questa sessione si creerà la formulazione di un nuovo modello di pianificazione per la produzione multi-periodo. Si userà il modello creato nella sessione 3, e si faranno le necessarie aggiunte e aggiornatmenti ad essa.

In questo nuovo problema, si ha un periodo pianificato di quattro mesi, da Gennaio ad Aprile.Si ha bisogno di creare un indice che contenga i quattro mesi menzionati, e poi aggiornare il resto del modello di conseguenza, aggiungendo l'indice ai vettori definiti.

Come nel problema della Sessione 3, il prezzo di vendita per ogni prodotto è ancora $120.00, $100.00, $115.00, rispettivamente. Ora,invece di avere una singola domanda per ogni prodotto, si hanno domande separate per ogni prodotto e ogni mese, come dato nella tabella sottostante:

Il tasso di produzione e il costo di produzione rimane lo stesso, come dato nella tabella della sessione 3. Si noti che i giorni di produzione disponibili sono differenti per ogni mese con 23 giorni per Gennaio, 20 per Febbraio, 23 per Marzo e 22 per Aprile.

S' introdurrà l'inventario nel modello, quindi, si ha il costo dell'inventario per ogni prodotto con A1 $3.50/month , A2 -$4.00/month e A3 - $3.00/month, ripettivamente.

Ogni prodotto occupa la stessa quantità di spazio, ma la capacità totale dell'inventario è ora di 800 unità al mese.


Formulazione del modello in MPL

La lista sottostante è l'intera formulazione del modello per Planning4. Come si può vedere il modello è cresciuto rispetto alla Sessione 3. Le aggiunte la modello sono sottolineate in neretto così che sia più semplice vedere i cambiamenti.

     TITLE
        Production_Planning4;

     INDEX
        product   := (A1, A2, A3);
        month     := (Jan, Feb, Mar, Apr);

     DATA
        Price[product]                 := (120.00, 100.00, 115.00);
        Demand[product, month]         := (4300, 4200, 6400, 5300,
                                           4500, 5400, 6500, 7200,

                                           5400, 6700, 7800, 8200);
        ProdCost[product]              := (73.30, 52.90, 65.40);
        ProdRate[product]              := (500, 450, 550);
        ProdDaysAvail[month]           := (23, 20, 23, 22);
        InvtCost[product]              := (3.50, 4.00, 3.00);
        InvtCapacity                   := 800;

     VARIABLES
        Produce[product, month]  -> Prod;
        Inventory[product,month] -> Invt;

        Sales[product, month]    -> Sale;

     MACROS
        TotalRevenue     := SUM(product, month: Price * Sales);
        TotalProdCost    := SUM(product, month: ProdCost * Produce);
        TotalInvtCost    := SUM(product, month: InvtCost * Inventory);

        TotalCost        := TotalProdCost + TotalInvtCost;

     MODEL

        MAX Profit = TotalRevenue - TotalCost;

     SUBJECT TO
        ProdCapacity[month] -> PCap:
           SUM(product: Produce / ProdRate)  <=  ProdDaysAvail;

        InvtBal[product, month] -> IBal: 
           Produce + Inventory[month-1]  =  Sales + Inventory;

        MaxInventory[month] -> MaxI:
           SUM(product: Inventory)  <=  InvtCapacity;

     BOUNDS
        Sales  <=  Demand;

     END
   

Introduzione di nuovi elementi al modello passo per passo

Passo 1: Eseguire MPL e creare un nuovo modello

  1. Eseguire l'applicazione MPL.

  2. Scegliere File | Open e aprire il modello dalla sessione precedente Planning3.mpl.

  3. Scegliere File | Save As per salvarlo come nuovo file del modello Planning4.mpl.

Passo 2: Cambiare il titolo per il modello

Cambiare il titolo per il modello per sottolineare che si sta lavorando con il modello Planning4:

     TITLE
        Production_Planning4;
    

Passo 3: Aggiungere l'indice 'month' al modello

In questo esempio, c'e' un periodo pianificato di quattro mesi. Create un nuovo indice chiamato month. Questo indice avrà quattro elementi Jan, Feb, Mar, e Apr, per rappresentare il periodo pianificato di quattro mesi. Aggiungete la definizione seguente per l'indice month, che è sottolineato in neretto, alla sezione INDEX :

     INDEX
        product := (A1, A2, A3);
        month   := (Jan, Feb, Mar, Apr);
    

Passo 4: Aggiornate il vettore di dati 'Demand' per includere l'indice 'month'

Nella sezione DATA , la maggior parte delle definizioni di dati sono le stesse della Sessione 3. Uno dei vettori di dati ; Demand, necessita di essere aggiornato per includere l'indice month , così ora ha differenti valori per ogni mese.I valori per questo vettore sono dati nella tabella nella descrizione del problema precedentemente in questa sessione. Si aggiunga l'indice month come dichiarazione per il vettore di dati Demand, seguito con una lista di valori di dati come mostrato di seguito:

     DATA
        Price[product]        := (120.00, 100.00, 115.00);
        Demand[product,month] := (4300, 4200, 6400, 5300,
                                  4500, 5400, 6500, 7200,
                                  5400, 6700, 7800, 8200);
    

Passo 5: Aggiornate la costante di dati 'ProdDaysAvail' al vettore di dati sull'indice 'month'

La costante di dati ProdDaysAvail ora ha un valore differente per ogni mese, come nel vettore di dati Demand . Questo significa che necessita di essere aggiornato da una costante di dati a un vettore di dati dimensionali, con month come indice . Usando la lista di produzione dei giorni disponibili, trovata nella descrizione precedentemente in questa sessione, aggiornate il ProdDaysAvail come segue:

        ProdCost[product]      := (73.30, 52.90, 65.40);
        ProdRate[product]      := (500, 450, 550);
        ProdDaysAvail[month]   := (23, 20, 23, 22);
    

Passo 6: Aggiungere i vettori di dati per il costo dell'inventario e la capacità dell'inventario

La descrizione del problema ha definito un costo per ogni prodotto immagazzinato nell'inventario e un limite di quanto possa essere imagazzinato nell'inventario.Quindi,per rappresentare questo, aggiungere un vettore di dati in piu' al modello; InvtCost, e anche una nuova costante di dati, InvtCapacity. Alla fine della sessione DATA aggiungere le definizioni seguenti:

        InvtCost[product] := (3.50, 4.00, 3.00);
        InvtCapacity      := 800;
     

Passo 7: Aggiungere variabili d'inventario e vendita al modello

Con questo modello ci sono due nuove variabili,Sales e Inventory,(Vendite e Inventario) che necessitano di essere introdotte nel modello.La variabile Sales è usata per rappresentare quanto di ogni prodotto è venduto ogni mese.La variabile Inventory è usata per rappresentare quanto di ogni prodotto è immagazzinato, ogni mese. La variabile Produce necessita di essere aggiornata per includere l'indice month come differenti importi di ogni prodotto che viene prodotto, ogni mese. Nel modello si aggiunga le seguenti definizioni VARIABLES:

     VARIABLES
         Produce[product, month]     -> Prod;
         Inventory[product,month]    -> Invt;
         Sales[product, month]       -> Sale; 
    

Come nel modello precedente, il nome che appare dopo il segno '->' (read becomes) è un'abbreviazione opzionale del nome del vettore. Questo è usato per sfalsare le limitazione di misura del nome della variabile di molti LP solvers.

Passo 8: Aggiungere il costo dell'inventario alla funzione obiettiva

Nel modello dalla sessione precedente, il totale reddito e il costo totale della produzione sono inclusi nella funzione obiettiva. Ora si necessita di aggiornare questa funzione obiettiva con l'indice; month, e aggiungere un'entrata per il costo totale dell'inventario. Come nella sessione precedente, si continuerà ad usare macros per rappresentare ogni sommatoria.

Quando si calcola il reddito totale, si necessita di riferirsi alla variabile Sales invece che alla variabile Produce e aggiungere l'indice month alla sommatoria. Per il costo totale della produzione , si avra' anche bisogno di aggiornare la sommatoria per includere l'indice month. Il costo totale dell'inventario sarà definito, come il costo dell'inventario, periodi del livello dell'inventario, per ogni product e month.

Per fare dei cambiamenti nella sessione MACROS, sostituire la variabile Produce con la variabile Sales, aggiornare il reddito totale e le sommatorie del costo totale di produzione per includere l'indice month, e aggiungere una nuova definizione macro per il costo totale dell'inventario come segue:

     MACROS
         TotalRevenue     := SUM(product, month: Price * Sales);
         TotalProdCost    := SUM(product, month: ProdCost * Produce);
         TotalInvtCost    := SUM(product, month: InvtCost * Inventory);
         TotalCost        := TotalProdCost + TotalInvtCost;
     

Per favore si noti che macro per il costo totale della produzione e' stato rinominato TotalProdCost. Un'altra nuova macro; TotalCost, e'stata aggiunta dove si può sommare insieme queste due macros per ottenere il costo totale.Questo permette alla definizione della funzione obiettiva di rimanere invariata:

      MODEL

          MAX Profit = TotalRevenue - TotalCost;
    

Passo 9: Aggiornare il vincolo della capacità della produzione per mesi multipli

Nel vincolo production capacity , aggiungere l'indice month alla definizione di vinclo e il resto del vincolo rimane lo stesso.

     SUBJECT TO
         ProdCapacity[month] -> PCap:
             SUM(product: Produce / ProdRate)  <=  ProdDaysAvail;
    

Per favore si noti che in MPL non si deve introdurre ogni indice sottoscritto quando riferito al data e ai vettori di variabile. Questo significa che si può facilmente aggiungere più indici ai vincoli senza dover cambiare ci si riferisce ad ogni vettore.

Passo 10 : Aggiungere un vincolo di equilibrio per l'inventario al modello

L'aggiunta della variabile Inventory al modello necessita d'includere un vincolo standard di equilibrio dell'inventario.Questo vincolo fluttua su ogni prodotto e ogni mese, specificando che la produzione, più l'inventario per il mese precedente, è equal alla quantità venduta, più l'inventario per il mese corrente. Aggiungere il seguenteto InvtBal vincolo sottostante al precedente vincolo ProdCapacity:

        InvtBal[product, month] -> IBal:
            Produce + Inventory[month-1]  =  Sales + Inventory; 
    

Quando si introduce i periodi di tempo, come in questo caso il mese precedente, MPL permette di usare un' espressione come [month-1].

Passo 11: Aggiungere un vincolo di capacità d'inventario al modello

C'e' un limite su quanto spazio disponibile c'e' per un inventario.Quindi, bisogno aggiungere un vincolo di capacità d'inventario al modello. Nella descrizione del problema, Vi e' stato detto che ogni prodotto orende un uguale quantità di spazio nell'inventario e che si può aggiungere , o sommare sopra tutti i prodotti per far si' che tutto lo spazio dell'inventario sia usato. Aggiungere la seguente definizione di vincolo al modello:

        MaxInventory[month] -> MaxI:
            SUM(product: Inventory)  <=  InvtCapacity;
    

Passo 12: Aggiornare il limite superiore della massima domanda per usare la variabile 'vendite'

Nel limite superiore della massima domanda si necessita di aggiornarlo per includere la variabile Sales (Vendite) invece della variabile Produce (Prodotto) come mostrato qui sotto:

     BOUNDS
        Sales  <=  Demand;
    

Dopo aver finito d'introdurre il modello, si dovrebbe salvarlo scegliendo Save (Salvare) dal menu File (Archivio).


Risolvere il modello e analizzare la soluzione

Il prossimo passo è risovere il modello Planning4, scegliendo Solve CPLEXdal menu Run. Se si è introdotto i dati correttamente, MPL visualizzerà il messaggio Optimal Solution Found (Soluzione ottimale trovata). Se c'è una finestra d'errore, con un errore di sintassi, per favore controllare la formulazione introdotta con il modello dettagliato prima nella sessione:

Dopo aver risolto il modellol MPL automaticamente crea un file standard di soluzione chiamato 'Planning4.sol'. Si piuò visulaizzare il file di soluzione in una finestra di vista premendo il bottone View (Vista) nella parte inferiore della Status Window (Finestra della stato). Una lista completa di soluzioni è mostrata sotto:

     MPL Modeling System   -   Copyright (c) 1988-2001, Maximal Software, Inc.
  --------------------------------------------------------------------------------

  MODEL STATISTICS

  Problem name:       Production_Planning4

  Filename:           Planning4.mpl
  Date:               April 17, 1998
  Time:               22:52
  Parsing time:       0.15 sec

  Solver:             CPLEX
  Objective value:    2246007.27273
  Iterations:         26
  Solution time:      0.04 sec

  Constraints:        20
  Variables:          36
  Nonzeros:           69
  Density:            10 %



  SOLUTION RESULT


    Optimal solution found


      MAX Profit   =    2246007.2727



  MACROS

      Macro Name                           Values
    -----------------------------------------------
      TotalRevenue                   5386045.4545
      TotalProdCost                  3139078.1818
      TotalInvtCost                      960.0000
      TotalCost                      3140038.1818
    -----------------------------------------------



  DECISION VARIABLES


  VARIABLE Produce[product,month] :

     product  month           Activity     Reduced Cost
    ----------------------------------------------------
     A1       Jan           4300.0000           0.0000
     A1       Feb           4200.0000           0.0000
     A1       Mar           4409.0909           0.0000
     A1       Apr           3545.4545           0.0000
     A2       Jan           1800.0000           0.0000
     A2       Feb              0.0000          -3.6667
     A2       Mar              0.0000          -4.7889
     A2       Apr              0.0000          -0.7889
     A3       Jan           5720.0000           0.0000
     A3       Feb           6380.0000           0.0000
     A3       Mar           7800.0000           0.0000
     A3       Apr           8200.0000           0.0000
    ----------------------------------------------------


  VARIABLE Inventory[product,month] :

     product  month           Activity     Reduced Cost
    ----------------------------------------------------
     A1       Jan              0.0000          -0.2000
     A1       Feb              0.0000          -2.4900
     A1       Mar              0.0000          -3.5000
     A1       Apr              0.0000        -123.5000
     A2       Jan              0.0000          -4.0000
     A2       Feb              0.0000          -4.0000
     A2       Mar              0.0000           0.0000
     A2       Apr              0.0000        -108.0000
     A3       Jan            320.0000           0.0000
     A3       Feb              0.0000          -2.0818
     A3       Mar              0.0000          -3.0000
     A3       Apr              0.0000        -110.8545
    ----------------------------------------------------


  VARIABLE Sales[product,month] :

     product  month           Activity     Reduced Cost
    ----------------------------------------------------
     A1       Jan           4300.0000           4.3100
     A1       Feb           4200.0000           1.0100
     A1       Mar           4409.0909           0.0000
     A1       Apr           3545.4545           0.0000
     A2       Jan           1800.0000           0.0000
     A2       Feb              0.0000           0.0000
     A2       Mar              0.0000           0.0000
     A2       Apr              0.0000          -4.0000
     A3       Jan           5400.0000          11.0636
     A3       Feb           6700.0000           8.0636
     A3       Mar           7800.0000           7.1455
     A3       Apr           8200.0000           7.1455
    ----------------------------------------------------



  CONSTRAINTS


  CONSTRAINT ProdCapacity[month] :

     month              Slack     Shadow Price
    -------------------------------------------
     Jan              0.0000      -21195.0000
     Feb              0.0000      -22845.0000
     Mar              0.0000      -23350.0000
     Apr              0.0000      -23350.0000
    -------------------------------------------


  CONSTRAINT InvtBal[product,month] :

     product  month              Slack     Shadow Price
    ----------------------------------------------------
     A1       Jan              0.0000         115.6900
     A1       Feb              0.0000         118.9900
     A1       Mar              0.0000         120.0000
     A1       Apr              0.0000         120.0000
     A2       Jan              0.0000         100.0000
     A2       Feb              0.0000         100.0000
     A2       Mar              0.0000         100.0000
     A2       Apr              0.0000         104.0000
     A3       Jan              0.0000         103.9364
     A3       Feb              0.0000         106.9364
     A3       Mar              0.0000         107.8545
     A3       Apr              0.0000         107.8545
    ----------------------------------------------------


  CONSTRAINT MaxInventory[month] :

     month              Slack     Shadow Price
    -------------------------------------------
     Jan            480.0000           0.0000
     Feb            800.0000           0.0000
     Mar            800.0000           0.0000
     Apr            800.0000           0.0000
    -------------------------------------------

  END
  

In accordo con la soluzione, il profitto è ora $2.2M che è considerevolmente più alto di quanto non fosse nel modello Planning3, come stiamo lavorando ora con quattro mesi. Questo viene dal reddito totale di $5.4M e un costo totale di $3.1M, la maggior parte di questo è il costo di produzione, most of which is the production cost, come manteniamo un inventario molto basso solo per Gennaio.

Se si guarda alla variabileProduce (Prodotto) nella soluzione, si noterà che stiamo producendo prodotti A1 e A3 per l'itero periodo pianificato, sebbene non sempre sulla domanda totale. Il prodotto A2, in un altro senso, on the other hand, ha prodotto solo 1800 unità in Gennaio poichè non abbiamo abbastanza capacità di produrre tutti e tre i prodotti.

In Gennaio, il modello ha deciso di produrre 320 unità extra di A3, sulla domanda richiesta, al fine di metterne sufficiente nell'inventario per soddisfare la domanda in Febbraio.


Back To Top | Maximal Home Page | Overview | Previous Page | Next Page